// pages/createVote/createVote.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    type:'',//投票类型
    avatarUrl: '', //发起人头像
    nickName: '', //发起人昵称
    formTitle: '', //投票标题
    formDesc: '', //投票描述
    optionList: [], //投票选项
    nowDate: '', //投票时间
    endDate: '', //投票时间
    isAnonymous: false, //是否匿名
    isPublicity: true,//是否公开
    start: 0,
    end: 0,
    imgUpLoadList: [],
    imgList: [],
    multiArray: [
      ['总共'
      // , '每天'
    ],
      ['1', '2', '3', '4', '5']
    ], //选择器
    objectMultiArray: [
      [{
          id: 0,
          name: '总共'
        },
        {
          id: 1,
          name: '每天'
        }
      ],
      [{
          id: 0,
          name: '1'
        },
        {
          id: 1,
          name: '2'
        },
        {
          id: 2,
          name: '3'
        },
        {
          id: 3,
          name: '4'
        },
        {
          id: 4,
          name: '5'
        }
      ]
    ],
    multiIndex: [0, 0], //选择器选择数组
  },
  /**
   * formTitle双向传输
   */
  onTitleInputChange(e) {
    this.setData({
      formTitle: e.detail.value
    })
  },
  /**
   * formDesc双向传输
   */
  onDescChange(e) {
    this.setData({
      formDesc: e.detail.value
    })
  },
  /**
   * 添加选项
   */
  onTapAddOption() {
    const newOptionList = this.data.optionList
    newOptionList.push('')
    this.setData({
      optionList: newOptionList
    })
  },
  /**
   * 添加选项
   */
  onOptionInputChange(e) {
    const newOptionList = this.data.optionList //获取当前的optionList
    const changedIndex = e.currentTarget.dataset.optionIndex //获取当前修改的元素的下标
    newOptionList[changedIndex] = e.detail.value //将视图层的数据更新到逻辑层变量中
    this.setData({
      optionList: newOptionList //更新data对象中的optionList
    })
  },
  /**
   * 删除选项
   */
  onTapDelOption(e) {
    const delIndex = e.currentTarget.dataset.optionIndex //获取当前修改的元素的下标
    const newOptionList = this.data.optionList.filter( //筛选当前数组
      (v, i) => i !== delIndex
    )
    this.setData({
      optionList: newOptionList
    })
  },
  /**
   * 多列选择器相关显示
   */
  bindMultiPickerChange: function (e) {
    console.log('picker发送选择改变，携带值为', e.detail.value)
    this.setData({
      multiIndex: e.detail.value
    })
  },
  bindMultiPickerColumnChange: function (e) {
    console.log('修改的列为', e.detail.column + 1, '，值为', e.detail.value)
    var data = {
      multiArray: this.data.multiArray,
      multiIndex: this.data.multiIndex
    };
    data.multiIndex[e.detail.column] = e.detail.value;
    switch (e.detail.column) {
      case 0:
        switch (data.multiIndex[0]) {
          case 0:
            data.multiArray[1] = ['1', '2', '3', '4', '5'];
            break;
          case 1:
            data.multiArray[1] = ['1', '2', '3', '4', '5'];
            break;
        }
        data.multiIndex[1] = 0;
        break;
      case 1:
        switch (data.multiIndex[0]) {
          case 0:
            data.multiArray[1] = ['1', '2', '3', '4', '5'];
            break;
          case 1:
            data.multiArray[1] = ['1', '2', '3', '4', '5'];
            break;
        }
        break;
    }
  },

  /*
   *截止日期
   */
  onChangeEndDate(e) {
    this.setData({
      endDate: e.detail.value
    })
  },
  /**
   * 是否匿名
   */
  onChangeIsAnonymous(e) {
    this.setData({
      isAnonymous: e.detail.value
    })
  },
    /**
   * 是否公开
   */
  onChangeIsPublicity(e) {
    this.setData({
      isPublicity: e.detail.value
    })
  },
  /*
   *选择图片
   */
  chooseImg() {
    wx.chooseImage({
      count: 3 - this.data.imgList.length,
      sizeType: 'compressed',
      sourceType: ['album', 'camera'],
      success: res => {
        //console.log('选择图片成功', res)
        if (this.data.imgList.length !== 0) {
          this.setData({
            imgList: this.data.imgList.concat(res.tempFilePaths)
          })
        } else {
          this.setData({
            imgList: res.tempFilePaths
          })
        }
      }
    })
  },
  /**
   * 上传图片
   */
  uploadImg(photoTempPath) {
    var imgUpLoadList = new Array
    for (let i = 0; i < photoTempPath.length; i++) {
      wx.cloud.uploadFile({
        cloudPath: "textVoteImg/" + Date.now() + ".jpg",
        filePath: photoTempPath[i]
      }).then(res => {
        imgUpLoadList[i] = res.fileID
      })
      this.setData({
        imgUpLoadList: imgUpLoadList
      })
    }
  },
  /**
   * 预览图片
   */
  previewImg(e) {
    var _that = this
    if (_that.data.end - _that.data.start < 350) {
      wx.previewImage({
        urls: this.data.imgList,
        current: this.data.imgList[e.currentTarget.dataset.id]
      })
    }
  },
  mytouchstart(e) { //记录触屏开始时间
    this.setData({
      start: e.timeStamp
    })
  },
  mytouchend(e) { //记录触屏结束时间
    this.setData({
      end: e.timeStamp
    })
  },
  /**
   * 删除图片
   */
  deleteImg(e) { //长按事件内容   
    const delIndex = e.currentTarget.dataset.id
    const newImgList = this.data.imgList.filter(
      (_v, i) => i !== delIndex
    )
    this.setData({
      imgList: newImgList
    })
  },

  // 校验表单数据是否完整，如果校验通过就返回null，否则返回需要提示的文字
  checkFormValid() {
    if (!this.data.formTitle) {
      return '标题不能为空'
    }
    if (this.data.optionList.length < 2) {
      return '至少需要2个选项'
    }
    for (let i = 0; i < this.data.optionList.length; i++) {
      if (!this.data.optionList[i]) {
        return '选项不能为空'
      }
    }
    return null
  },
  formSubmit() {
    var that = this
    wx.showLoading({
      title: '上传数据中',
    })
    this.uploadImg(this.data.imgList)
    // 提交前需要先对表单内容进行校验
    const msg = this.checkFormValid()
    if (msg) { // 在if判断时，null会被转换为false
      wx.showToast({ // 调用提示框API显示提示内容
        title: msg, // 提示框中的文字内容
        icon: 'none' // 提示框的图标，none表示没有图标
      })
      return // 提前返回，函数会在这里结束，后面的内容不会执行
    }
    // 校验通过时后面的内容才会被执行
    wx.getUserInfo({
      success: function (res) {
        const userInfo = res.userInfo
        that.setData({
          nickName: userInfo.nickName,
          avatarUrl: userInfo.avatarUrl
        })
      }
    });
    setTimeout(function () {
      //要延时执行的代码
      const now = Number(new Date())
      const formData = {
        type: that.data.type,
        avatarUrl: that.data.avatarUrl,
        nickName: that.data.nickName,
        voteTitle: that.data.formTitle,
        voteDesc: that.data.formDesc,
        optionList: that.data.optionList,
        imgList: that.data.imgUpLoadList,
        multiIndex: that.data.multiIndex,
        now:now,
        endDate: that.data.endDate,
        isAnonymous: that.data.isAnonymous,
        isPublicity:that.data.isPublicity,
        voteList: []
      }

      //表单提交事件处理函数
      //将formData提交到云端
      const db = wx.cloud.database() // 获得数据库引用
      db.collection('votes').add({ // 将表单数据添加到votes集合中
        data: formData
      }).then(res => {
        //console.log(res._id) // 从返回值中可以拿到新添加的记录自动生成的ID
        const voteID = res._id
        wx.hideLoading({
          success: (res) => {
            wx.showToast({
              title: '创建投票成功',
              icon: 'success',
              duration: 1000
            })
            .then(res=>{
              setTimeout(function(){
                wx.redirectTo({ // 自动跳转到参与投票页面
                  url: '/pages/vote/textVote?voteID=' + voteID,
                })
              },1000)
            })
          },
        })
      }).catch(res => {
        console.error(res)
        wx.showToast({ // 创建投票失败时，显示提示框提示用户
          title: '创建投票失败', // 提示框中的文字内容
          icon: 'none' // 提示框的图标，none表示没有图标
        })
      })

    }, 1000) //延迟时间 这里是1秒
  },
  formReset(type) {
    //表单重置事件处理函数
    const now = new Date()
    const nowYear = now.getFullYear()
    const nowMonth = now.getMonth() + 1
    const nowDay = now.getDate()
    const nowDate = nowYear + '-' +
      ((nowMonth < 10) ? ('0' + nowMonth) : nowMonth) + '-' +
      ((nowDay < 10) ? ('0' + nowDay) : nowDay)
    this.setData({
      type:type,
      formTitle: '',
      formDesc: '',
      optionList: [],
      nowDate,
      endDate: nowDate,
      isAnonymous: false,
      isPublicity:true,
      imgList: [],
      multiIndex: [0, 0]
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log('投票类型：',options.type)
    this.formReset(options.type)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {},

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    return {
      title: '分享小程序',
      path: '/pages/welcome/welcome'
    }
  }
})